﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Model;
using Service;

namespace ItaServicosWEB.Controllers
{
    public class CarrinhoController : Controller
    {
        //
        // GET: /Carrinho/
        private GerenciadorCarrinho gCarrinho;
        private GerenciadorItemServico gItem;
        HttpCookie cookie;
        public CarrinhoController()
        {
            gCarrinho = new GerenciadorCarrinho();
            gItem = new GerenciadorItemServico();
            cookie = new HttpCookie("CarrinhoServico");
        
        }

        public ActionResult Index()
        {
            return View();
        }

       

      public void AdicionarAoCarrinho(string idProduto)
        {
         

        // Se o cookie não existe, efetuamos sua criação
        if (Request.Cookies["CarrinhoServico"] == null)
        {
            cookie = new HttpCookie("CarrinhoServico");
            // Configura a expiração do Cookie para 4 horas
            cookie.Expires = DateTime.Now.AddHours(4);
            // Adiciona item ao cookie
            cookie.Values.Add(idProduto, null);
        }
        // Caso o cookie já exista
        else
        {
            bool existe = false;
            // Resgata o cookie
            cookie = (HttpCookie)Request.Cookies["CarrinhoServico"];
            // Configura a expiração do Cookie para 4 horas
            cookie.Expires = DateTime.Now.AddHours(4);

            // Verifica se o ID do produto já foi inserido ao cookie
            foreach (string item in cookie.Values.AllKeys)
            {
                if (item == idProduto)
                {
                    existe = true;
                    break;
                }
            }

            // Se o produto não existir no carrinho ser adicionado
            if (!existe)
                cookie.Values.Add(idProduto, null);
        }

        // Grava o cookie
        Response.Cookies.Add(cookie);
    }
 

     // Remove porduto do carrinho
    public string RecuperarIDProdutos()
    {
        string ids = null;
        int index = 1;

        // Resgata o cookie
        HttpCookie cookie = (HttpCookie)Request.Cookies["CarrinhoServico"];

        // Verifica se o ID do produto já foi inserido ao cookie
        foreach (string item in cookie.Values.AllKeys)
        {
            ids += item;

            if (index < cookie.Values.Count)
                ids += ",";

            index += 1;
        }

        return ids;
    }

    public void RemoverDoCarrinho(string idProduto)
    {
        // Resgata o cookie
        HttpCookie cookie = (HttpCookie)Request.Cookies["CarrinhoServico"];
        // Configura a expiração do Cookie para 4 horas
        cookie.Expires = DateTime.Now.AddHours(4);
        // Remove o id do produto do cookie
        cookie.Values.Remove(idProduto);
        // Grava o cookie

        Response.Cookies.Add(cookie);
    }
 




        //public ActionResult AdicionarItensCarrinho( int iditem)
        //{
        //    if (!Cookies.ChecarId())
        //    {
        //        Cookies.GravarCookie(iditem.ToString());
                
        //    }
        //    else
        //    {
        //        Adicionar(iditem, item);

        //    }

        //    return RedirectToAction("ExibirItensAtuaisCarrinho");
        //}


        //public ActionResult AdicionarItensCarrinho(ItemServicoModel item, CarrinhoModel carrinho, int iditem)
        //{
        //    if (!Cookies.ChecarId())
        //    {
        //        CriarCarrinho(carrinho);
        //        Adicionar(iditem,item);
        //    }
        //    else
        //    {
        //        Adicionar(iditem, item);
 
        //    }

        //    return RedirectToAction("ExibirItensAtuaisCarrinho");
        //}


 public ActionResult ExibirItensAtuaisCarrinho()
        {
            ViewBag.Mensagem = "Seu carrinho de contratações está vazio";
            if (!Cookies.ChecarId() || !VerificaItensBancoArmazenados())
            {
                return View("Carrinho Vazio");
            }
            else
            {
                int car = Cookies.LerCookie();
                var model = gItem.obterCarrinhoServico(car);
                decimal modelo = gItem.ObterSomatorio(car);
                Session["Total"] = modelo;
                if (model == null)
                    return View("NotFound");
                else
                    return View("ExibirItensAtuaisCarrinho", model);
            }



        }


        public void CriarCarrinho(CarrinhoModel carrinho)
        {
            
            gCarrinho.Inserir(carrinho);
            var model = gItem.ObterItem();
            if (model > 0)
               Cookies.GravarCookie(model.ToString());
        }

        public void Adicionar(int iditem,ItemServicoModel item)
        {
            if (!VerificaDuplicadasCarrinho(iditem))
            {
                var car = Cookies.LerCookie();
                gItem.Inserir(item);
            
            }
            
        
        }

        public ActionResult ExcluirItensCarrinho(int iditem)
        {
            gItem.Remover(iditem);

            return RedirectToAction("ExibirItensAtuaisCarrinho");
        }

        private bool VerificaItensBancoArmazenados()
        {
            int car = Cookies.LerCookie();
            if (car == 0)
                return false;
            var model = gCarrinho.Obter(car);
            if (model == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        private bool VerificaDuplicadasCarrinho(int iditem)
        {
            int car = Cookies.LerCookie();
            if (car == 0)
                return false;
            var model = gItem.ComparaItemCarrinho(car,iditem);
            if (model == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }




             
        
        
        
        }





    }

